/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package documenteditor.entidade.model;

import documenteditor.entidade.model.dominio.EstadoCivil;
import documenteditor.entidade.model.dominio.Sexo;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Persistence;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;

/**
 *
 * @author gleidson.moura
 */
@Entity
@DiscriminatorValue(value = "F")
@NamedQueries({@NamedQuery(name = "Cliente.findBySexo", query = "SELECT c FROM Cliente c WHERE c.sexo = :sexo"),
               @NamedQuery(name = "Cliente.findByIdentidade", query = "SELECT c FROM Cliente c WHERE c.identidade = :identidade"),
               @NamedQuery(name = "Cliente.findByEstadoCivil", query = "SELECT c FROM Cliente c WHERE c.estadoCivil = :estadoCivil"),
               @NamedQuery(name = "Cliente.findByDataNascimento", query = "SELECT c FROM Cliente c WHERE c.dataNascimento = :dataNascimento"),
               @NamedQuery(name = "Cliente.findByCpf", query = "SELECT c FROM Cliente c WHERE c.cpf = :cpf")})
public class ClientePessoaFisica extends Cliente {
    private static final long serialVersionUID = 1L;

    @Column(name="SEXO")
    @Enumerated(EnumType.STRING)
    private Sexo sexo;

    @Column(name="ESTADO_CIVIL")
    @Enumerated(EnumType.STRING)
    private EstadoCivil estadoCivil;

    @Column(name="CPF", length=11, nullable=true, unique=false)
    private String cpf;

    @Column(name="IDENTIDADE", nullable=true)
    private String identidade;

    @Column(name="DATA_NASCIMENTO", nullable=true)
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;

    @ManyToOne(cascade=CascadeType.ALL, targetEntity=Profissao.class, fetch=FetchType.EAGER)
    @JoinColumn(name="ID_PROFISSAO")
    @ForeignKey(name="FK_CLI_PESS_FIS_PROFISSAO")
    private Profissao profissao;

    @ManyToOne(targetEntity=TimeFutebol.class, fetch=FetchType.EAGER)
    @JoinColumn(name="ID_TIME_FUTEBOL")
    @ForeignKey(name="FK_CLI_PESS_FISICA_TIME_FUT")
    private TimeFutebol timeFutebol;

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getIdentidade() {
        return identidade;
    }

    public void setIdentidade(String identidade) {
        this.identidade = identidade;
    }

    public Profissao getProfissao() {
        return profissao;
    }

    public void setProfissao(Profissao profissao) {
        this.profissao = profissao;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public TimeFutebol getTimeFutebol() {
        return timeFutebol;
    }

    public void setTimeFutebol(TimeFutebol timeFutebol) {
        this.timeFutebol = timeFutebol;
    }
    
    @Override
    public String toString() {
        return "documenteditor.entidade.model.Cliente[id=" + getIdCliente() + "]";
    }

    public void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("FidyCardPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

}
